from django.shortcuts import render
from django.views import View
from apps.areas.models import Area
from django import http
from django.core.cache import cache


# Create your views here.
class ProvinceAreasView(View):
    """省级地区"""
    def get(self, request):
        """提供省级地区数据"""

        # 去缓存取 省份数据
        province_list = cache.get('province_list')
        # 判断有没有
        if not province_list:
            # 如果没有交互数据库
            print('没有缓存数据')

            # 1.查询省级数据
            province_model_list = Area.objects.filter(parent__isnull=True)

            # 2.整理省级数据
            province_list = []
            for province_model in province_model_list:
                province_list.append({'id': province_model.id,
                                      'name': province_model.name})
            # 将最新的交互数据库的数据存入缓存
            cache.set('province_list', province_list, 3600)

        # 3.返回整理好的省级数据
        return http.JsonResponse({'code': 0, 'errmsg': 'OK', 'province_list': province_list})


class SubAreasView(View):
    """子级地区：市和区县"""
    def get(self, request, pk):
        """提供市或区地区数据"""
        # 去缓存取 省份数据
        sub_data = cache.get('sub_data' + str(pk))
        if not sub_data:
            # 1.查询市或区数据
            # sub_model_list = Area.objects.filter(parent=pk)

            #  查询省份数据
            # parent_model = Area.objects.get(id=pk)

            # sub_model_list[0]
            # parent_model = sub_model_list[0].parent

            # id=pk 取省份,根据省份取子级
            parent_model = Area.objects.get(id=pk)
            sub_model_list = parent_model.subs.all()

            # 2.整理市或区数据
            sub_list = []
            for sub_model in sub_model_list:
                sub_list.append({'id': sub_model.id,
                                 'name': sub_model.name})
            sub_data = {
                'id': parent_model.id,  # pk
                'name': parent_model.name,
                'subs': sub_list
            }
            # 将最新交互数据库的数据存入缓存
            cache.set('sub_data_' + str(pk), sub_data, 3600)

        # 3.响应市或区数据 ok: 0
        return http.JsonResponse({'code': 0,
                                  'errmsg': 'OK',
                                  'sub_data': sub_data})
